import { getLoginUser } from '@/api/userController'
import { defineStore } from 'pinia'
import { ref } from 'vue'

export const useLoginUserStore = defineStore('loginUser', () => {
	const loginUser = ref<API.LoginUserVO>({
    userName: '未登录',
  })

	// 添加正在验证标记，避免重复请求
	const isValidating = ref(false)

	/**
	 * 远程获取登录信息
	 */
	async function fetchLoginUser() {
		// 如果正在验证，直接返回false
		if (isValidating.value) {
			return false
		}

		isValidating.value = true
		try {
			const res = await getLoginUser()
			if (res.data.code === 0 && res.data.data) {
				loginUser.value = res.data.data
				return true // 成功获取用户信息
			} else {
				// 后端返回错误，清除本地状态
				clearLoginUser()
				return false
			}
		} catch (error: any) {
			// 请求失败（如401），清除本地状态
			clearLoginUser()
			throw error
		} finally {
			isValidating.value = false
		}
	}

	/**
	 * 设置登录信息
	 */
	function setLoginUser(newLoginUser: API.LoginUserVO) {
		loginUser.value = newLoginUser
	}

	/**
	 * 清除登录状态（登录过期时使用）
	 */
	function clearLoginUser() {
		loginUser.value = {
			userName: '未登录',
		}
	}

	/**
	 * 检查是否已登录
	 */
	function isLoggedIn(): boolean {
		return !!(loginUser.value?.id && loginUser.value.userName !== '未登录')
	}

	return {
		loginUser,
		isValidating,
		fetchLoginUser,
		setLoginUser,
		clearLoginUser,
		isLoggedIn,
	}
}, {
	// 启用持久化，将用户登录状态保存到 localStorage
	persist: {
		key: 'tao-ai-code-mother-login-user',
		storage: localStorage
	}
})
